#include "myhead.h" 
#include "def.h"
void copyFile(char* params[], int paramNumber)
{
	int status;
	if (paramNumber!=3)
	{
		printf(helpStr);
	}
	else
	{
		if (fork()==0)
		{
			//execv("/bin/cp", params);
			cop(params,paramNumber);
			exit(0);
		}
		else
		{
			if (wait(&status)<0)
			{
				printf("wait error\n");
			}
		}
	}
}
void cop(char* argv[], int arc)
{
	FILE *fin;	// 源文件
	FILE *fout; // 目标文件
	char *buff; // 缓冲区指针

	int ret;	// 用于检查函数是否操作成功

	/* 检查参数 */
	if (arc != 3)
	{
		printf("Usage: %s src_file dest_file\n", argv[0]);
		return -1;
	}

	/* 以读的方式打开源文件 */
	fin = fopen(argv[1], "r");
	if (NULL == fin) 	// 检查打开情况
	{
		perror(argv[1]);
		return -2;
	}

	/* 以写的方式打开目标文件 */
	fout = fopen(argv[2],"w");
	if (NULL == fout) 	// 检查打开情况
	{
		perror(argv[1]);
		goto err0;
	}
	
	/* 分配缓冲区内存空间 */
	buff = malloc(BUFFSIZE);
	if (NULL == buff)	// 检查分配空间是否成功
	{
		fprintf(stderr, "molloc failed\n");
		goto err1;
	}

	/* 循环读写文件 */
	while (1)
	{
		/* 从源文件中读取内容 */
		ret = fread(buff, 1, BUFFSIZE, fin);
		
		/* 把从源文件读取到的容写入到目标文件中 */
		if (ret != BUFFSIZE)
		{
			fwrite(buff, ret, 1, fout);
		}
		else
		{
			fwrite(buff, BUFFSIZE, 1, fout);
		}
		
		if (feof(fin))
			break;
	}

	/* 关闭打开的文件 */
	fclose(fin);
	fclose(fout);

	/* 释放动态分配的内存空间 */
	free(buff);
	
	return 0;
	
	/* 出错时的层次退出 */
err2:
	free(buff);
err1:
	fclose(fout);
err0:
	fclose(fin);

	return -3;
}
